<?php
/**
 * View_City
 *
 * Класс предназначен для отображения информации, связанной с городами
 * @author Дмитрий Кузьма <kouzma.d@gmail.com>
 * @version 1.0
 */
class View_City extends View_Base {

	/**
	 * Выводит список городов конкретной страны
	 * 
	 * @param array $arrCities
	 */
	public function showCountryList($arrCities) {
	  Service_Debug::setDebug();
	  if (!$arrCities) return false;
	  $urlBackLink = $this->getLanguageUrl(W_ABSPATH . 'hotels.htm');
	  $lang = Service_Translate::getLang();
		$citiesAmount = sizeof($arrCities);
	  
	  $objViewBlock = new View_Block();
	  echo '<div id="citiesList">';
		  echo '<ul class="column">';
	  	for ($i = 0; $i < $citiesAmount; $i++) {
		  	$cityName = View_City::getName($arrCities[$i]);
		  	$firstSymbol = Service_Function::utf8_substr($cityName, 0, 1);
				if (!$i) $currentSymbol = $firstSymbol;			      
				if ($firstSymbol != $currentSymbol)	$currentSymbol = $firstSymbol;
				$cityLi = '';
				if (!empty($arrCities[$i]['top'])) $cityLi .= '<b>';
				$cityLi .= '<a href="' . $this->getUrl($arrCities[$i]) . '">' . $cityName . '</a> (' . $arrCities[$i]['nr_hotels'] . ')';
				if (!empty($arrCities[$i]['top'])) $cityLi .= '</b>';
				$arrCitiesByLetters[$firstSymbol][] = $cityLi;
	  	}
	  	$countryRus = array();
	  	$countryEn = array();
	  	foreach ($arrCitiesByLetters as $key => $arrValue) {
	  		if (($key>='А')&&($key <= 'Я')) {
	  			foreach ($arrValue as $value)
	  				$countryRus[$key][] = $value;
	  		}
	  	}
  		foreach ($arrCitiesByLetters as $key => $arrValue) {
  			if (!(($key>='А')&&($key <= 'Я'))) {
  				foreach ($arrValue as $value)
  					$countryEn[$key][] = $value;
  			}
	  	}
	  	ksort($countryRus);
	  	ksort($countryEn);
	  	$country = $countryRus + $countryEn;

	 		$i = 0;
	 		$sizeAll = 0;
	 		foreach ($country as $val) {
	 			$sizeAll += 2;
	 			if (count($val) >= 5) $sizeAll += 5;
	 			else $sizeAll += count($val);
	 		}
	 	
	 		$oneColumnAmount = ceil($sizeAll / 3);
	 		
	  	foreach ($country as $key => $arrCities) {

				echo '<li class="symbol">' . $key . '</li>';
				$i += 2;
				$j = 0;

				$closed = false;
				foreach ($arrCities as $city) {
					if ($j++ == 5) {
						echo '<li class="visible"><a href="#">...</a><ul>';
						$closed = true;
					}
					if ($j <= 5) {
						$i++;
					}
					echo '<li>' . $city . '</li>';
					
					if ($i >= $oneColumnAmount) {
						echo '</ul></li>';
						$closed = false;
	  				echo '</ul><ul class="column">';
	  				$i = 0;
	  			}					
				}
				if ($closed) echo '</ul></li>';
				
	  	}
	  	echo '</ul>';
	  echo '</div>';
	}
	

	
	
	/**
	 * Выводит список для администратора
	 *
	 * @param array $arrCities - массив со странами
	 */
	public function showListForAdmin($arrCities) {
	  Service_Debug::setDebug();
	  $sizeArrCities = sizeof($arrCities);
	  echo '<table class="oddEvenList">';
  	  echo '<tr>';
  	    echo '<th>#</th>';
  	    echo '<th>Name</th>';
  	    echo '<th>URL</th>';
  	    echo '<th>&nbsp;</th>';
  	    echo '<th>&nbsp;</th>';
  	  echo '</tr>';
  	  for ($i = 0; $i < $sizeArrCities; $i++) {
  	  	$cityUrl = $this->getUrl($arrCities[$i]);
  	    $trClass = ($i % 2) ? 'even' : 'odd'; //класс для чётных/нечётных строк
  	    echo '<tr class="' . $trClass . '" id="city_' . $arrCities[$i]['ID_city'] . '">';
    	    echo '<td>' . ($i + 1) . '</td>';
    	    echo '<td><a' . (!$arrCities[$i]['is_filled'] ? ' class="red"' : null) . ' href="' . $cityUrl . '">' . View_City::getName($arrCities[$i]) . '</a></td>';
    	    echo '<td>';
            echo '<a href="' . $cityUrl . '" title="Открыть в новой вкладке" target="_blank"><img src="' . W_IMAGES . 'icons/actions/open_ex.gif" alt="Open"></a> ';
            echo '<a target="_blank" href="' . $cityUrl . '">' . $arrCities[$i]['city_url'] . '</a>';
          echo '</td>';
          echo '<td>';
    	      echo '<a href="' . W_ADMIN . 'cities/edit/' . $arrCities[$i]['ID_city'] . '/" title="Редактировать"><img src="' . W_IMAGES . 'icons/actions/edit.gif" alt=""></a>';
    	    echo '</td>';
          echo '<td>';
    	      echo '<a href="' . W_ADMIN . 'cities/merge/' . $arrCities[$i]['ID_city'] . '/" title="Совмещение">Совмещение</a>';
    	    echo '</td>';
  	    echo '</tr>';
  	  }
	  echo '</table>';
	}
	
	/**
	 * Выводит форму добавления/редактирвоания города
	 * 
	 * @param City $objCity
	 */
	public function showEditForm(City $objCity) {
		Service_Debug::setDebug();
		$objForm = new Form_ViewForm(array(
			'errorIfExists' => true, 
			'leftWidth' => 200
		), $objCity);
		$objForm->show();
		
		$objForm->textField(array('maxlength' => 128, 'text' => 'Название города (ru)'), 'city_admin_name_ru');
		$objForm->textField(array('maxlength' => 128, 'text' => 'Название города (en)'), 'city_admin_name_en');
		
		$objForm->textField(array('maxlength' => 128, 'text' => 'URL', 'required' => 1), 'city_url');
		
		$objForm->textField(array('maxlength' => 128, 'text' => 'Meta-Title (ru)'), 'title_ru');
		$objForm->textField(array('maxlength' => 128, 'text' => 'Meta-Title (en)'), 'title_en');
				
		$objForm->textField(array('maxlength' => 128, 'text' => 'Meta-description (ru)'), 'description_ru');
		$objForm->textField(array('maxlength' => 128, 'text' => 'Meta-description (en)'), 'description_en');

		$objForm->textField(array('maxlength' => 128, 'text' => 'Meta-keywords (ru)'), 'keywords_ru');
		$objForm->textField(array('maxlength' => 128, 'text' => 'Meta-keywords (en)'), 'keywords_en');
		
		//Вывод WYSIWYG-поля
		$arrWysiwygSettings = array(
		  'rows' => 5, 
		  'cols' =>30, 
		  'text' => 'Текст', 
		  'class' => 'wysiwygAdmin'
		);
		$arrWysiwygSettings['text'] = 'Текст (ru)';
		$objForm->textareaField($arrWysiwygSettings, 'text_ru');
		$arrWysiwygSettings['text'] = 'Текст (en)';
		$objForm->textareaField($arrWysiwygSettings, 'text_en');
		$objForm->submitButton(array(), 'save');
		$objForm->close();
	}
	
	/**
   * Выводим фильтр для стран (левое меню)
   *
   * @param array $arrCountries - массив со всеми странами
   * @param int $idCountry - ID текущей страны
   */
  public function showCountryFilterForAdmin($arrCountries, /*$pageNum, */$idCountry = 0) {
    Service_Debug::setDebug();
  	$objCity = new City();
    $objForm = new Form_ViewForm(array(), $objCity);
    foreach ($arrCountries  as $key => $arrCountry) {
    	$arrCountries[$key]['country_final_name_ru'] = Service_Function::utf8_string_with_limit($arrCountry['country_final_name_ru'], 16);
    }
    echo '<div class="theSimplestBorder" id="countryFilterForAdmin">';
      echo '<p>Choose country</p>';
      echo '<p>';
        $arrCountriesForTop[0] = array('country_code' => '', 'country_final_name_ru' => '- It is not choosed -');
        $objForm->selectField(array('text' => 'Страна', 'class' => 'menuSelect', 'optionsArray' => $arrCountries, 'optionsArrayForTop' => $arrCountriesForTop, 'required' => 1, 
                                    'keyName' => 'country_code', 'valueName' => 'country_final_name_ru', 'value' => $idCountry,
                                    'js' => 'onchange="alert(1);city.applyCountryForAdmin(\'' . $idCountry . '\', \'\');"'), 'ID_country', true);
      echo '</p>';
      echo '<p>Write first letters of the city</p>';
      echo '<p>';
        $objForm->textField(array('size' => 10), 'city_name_start', true);
        echo '&nbsp;&nbsp;&nbsp;<a href="#" onclick="city.applyCountryForAdmin();return false;">Go</a>';
      echo '</p>';
    echo '</div>';
  }

	/**
	 * Выводит описание города
	 * 
	 * @param array $arrCity
	 */
	public function showDescription($arrCity, $headerName = '') {
		Service_Debug::setDebug();
		$language = Service_Translate::getLang();
		echo '<div id="countryDescription">';
			$text = $arrCity['text_' . $language];
			if (!empty($text) && isset($arrCity['ID_city'])) echo '<h2>' . Service_Translate::getText('О городе',  $this->getName($arrCity, 6)) . '</h2>';
			if ($headerName) echo '<h2>' . $headerName . '</h2>';
			echo $text;
		echo '</div>';
	}
	
	
	
	
/**
 * Выводит список отелей на странице города
 */
	public function showHotelsListByStars($arrClassHotels, $arrCity) {
		Service_Debug::setDebug();
		$j = 0;
		foreach ($arrClassHotels as $i => $arrClassHotelsClass)	{
			$this->showHotelsList($i, $arrClassHotelsClass, $arrCity, !$j++);
		}
	}
	
	
	public function showHotelsList($i, $arrClassHotelsClass, $arrCity, $isFirstBlock = false, $headerText = null, $showAllHotelsLink = true) {
		$language = Service_Translate::getLang();
		$cityName = View_City::getName($arrCity);
		$cityNameGenetive = View_City::getName($arrCity, 2);
		Service_Debug::setDebug();
		$linkUrl = $this->getUrlAllHotels($arrCity);
		$linkText = Service_Translate::getText('Просмотреть все отели');
		if (!empty($arrClassHotelsClass)) {
			if (empty($headerText)) {
				switch($i) {
					case 5:
						$headerText = Service_Translate::getText('Пятизвездочные отели города' , $cityNameGenetive);
						$linkUrl = $this->getUrlHotelsByStars($arrCity, $i);
						$linkText = Service_Translate::getText($i . ' звездочные отели');
						break;
					case 4:
						$headerText = Service_Translate::getText('Четырехзвездочные отели города', $cityNameGenetive);
						$linkUrl = $this->getUrlHotelsByStars($arrCity, $i);
						$linkText = Service_Translate::getText($i . ' звездочные отели');
						break;
					case 3:
						$headerText = Service_Translate::getText('Трехзвездочные отели города', $cityNameGenetive);
						$linkUrl = $this->getUrlHotelsByStars($arrCity, $i);
						$linkText = Service_Translate::getText($i . ' звездочные отели');
						break;
					case 2:
						$headerText = Service_Translate::getText('Другие популярные гостиницы города', $cityNameGenetive);
						break;
					case 1:
						$headerText = Service_Translate::getText('Популярные гостиницы города', $cityNameGenetive);
				}
			}
			echo '<div class="anyStarHotelCity">';
			if ($showAllHotelsLink) echo '<a class="showAll " href="' . $linkUrl . '">' .  $linkText . '</a>';
			echo '<h2>' .  $headerText .  '</h2>';
			foreach ($arrClassHotelsClass as $arrHotel) {
				$hotelUrl = View_Hotel::getUrl($arrHotel);
				echo '<div class="hotelCity hotel" data-hotel-id="' . (isset($arrHotel['ID_hotel']) ? $arrHotel['ID_hotel'] : $arrHotel['ID_our_hotel']) . '"' . (isset($arrHotel['ID_our_hotel']) ? ( 'data-our="' . $arrHotel['ID_our_hotel'] . '"') : null) . '>';
					echo '<div class="hotelInformation ">';	
						echo View_Hotel::getHotelPoster($arrHotel);
						echo '<div class="hotel-right-side">';
							echo '<h3 class="hotelName"><a href="' . $hotelUrl . '">' . View_Hotel::getName($arrHotel) . '</a><span class="stars stars' . $arrHotel['class'] . '"></span></h3>';
							
							echo '';
							echo '<div class="clearRight"></div>';
							echo '<div class="hotelAddress">' . View_Hotel::getAddressHotel($arrHotel) . ', ' . $cityName . (!empty($arrHotel['hotel_type_final_name_' . $language]) ? ' (' . $arrHotel['hotel_type_final_name_' . $language] . ')' : null) . '</div>';
							if (!empty($arrHotel['min_rate'])) {
								$objExchange = Service_Exchange::instance();
								echo '<div class="hotelMinPrice">' . Service_Translate::getText('Цена за сутки от') . ' ' . $objExchange->getSpanPrice($arrHotel['min_rate'], $arrHotel['currency_code']) . '</div>';
							}
							echo '<div class="hotelDescriptions">' . Service_Function::utf8_string_with_limit(View_Hotel::getDescription($arrHotel), 270, true, true, $hotelUrl, true) . '</div>';
						echo '</div>';
					echo '</div>';
					echo '<div class="endBlock">';
						echo '<a class="reservation standardSubmit button-with-arrow " href="' . $hotelUrl . '" rel="nofollow">' . Service_Translate::getText('Забронировать') . '</a>';
					echo '</div>';
				echo '</div>';
			}
			echo '</div>';
		}
		
	}
	
	/**
	 * Возвращает ссылку на город
	 * 
	 * @param array $arrCity - Массив с данными по городу
	 */
	public static function getUrl($arrCity, $needFullPath = false, $opposite = false, $urlLang = null) {
		Service_Debug::setDebug();
		//return ($needFullPath ? W_FULLPATH : W_ABSPATH) . 'hotels/' . $arrCity['country_url'] . '/' . $arrCity['city_url'] . '/hotels_list.htm';
		return self::getLanguageUrl(($needFullPath ? W_FULLPATH : W_ABSPATH) . 'hotels/' . $arrCity['country_url'] . '/' . $arrCity['city_url'] . '/hotels_list.htm', $needFullPath, $opposite, $urlLang);
	}	
	/**
	 * Возвращает ссылку на все отели города
	 * 
	 * @param array $arrCity - Массив с данными по городу
	 */
	public static function getUrlAllHotels($arrCity, $needFullPath = false, $opposite = false, $urlLang = null) {
		Service_Debug::setDebug();
		//return ($needFullPath ? W_FULLPATH : W_ABSPATH) . 'hotels/' . $arrCity['country_url'] . '/' . $arrCity['city_url'] . '/hotels_list.htm';
		return self::getLanguageUrl(($needFullPath ? W_FULLPATH : W_ABSPATH) . 'hotels/' . $arrCity['country_url'] . '/' . $arrCity['city_url'] . '/all_hotels.htm', $needFullPath, $opposite, $urlLang);
	}	
	
	/**
	 * Возвращает ссылку на отели города по звездам
	 * 
	 * @param array $arrCity - Массив с данными по городу
	 */
	public static function getUrlHotelsByStars($arrCity, $class, $needFullPath = false, $opposite = false, $urlLang = null) {
		Service_Debug::setDebug();
		return self::getLanguageUrl(($needFullPath ? W_FULLPATH : W_ABSPATH) . 'hotels/' . $arrCity['country_url'] . '/' . $arrCity['city_url'] . '/hotels_stars' . $class . '.htm', $needFullPath, $opposite, $urlLang);
	}
	
	/**
	 * Возвращает ссылку на хостелы города
	 * 
	 * @param array $arrCity - Массив с данными по городу
	 */
	public static function getUrlHostels($arrCity, $needFullPath = false, $opposite = false, $urlLang = null) {
		Service_Debug::setDebug();
		return self::getLanguageUrl(($needFullPath ? W_FULLPATH : W_ABSPATH) . 'hotels/' . $arrCity['country_url'] . '/' . $arrCity['city_url'] . '/hostels.htm', $needFullPath, $opposite, $urlLang);
	}

	/**
	 * Возвращает ссылку на мини отели города
	 *
	 * @param array $arrCity - Массив с данными по городу
	 */
	public static function getUrlMini($arrCity, $needFullPath = false, $opposite = false, $urlLang = null) {
		Service_Debug::setDebug();
		return self::getLanguageUrl(($needFullPath ? W_FULLPATH : W_ABSPATH) . 'hotels/' . $arrCity['country_url'] . '/' . $arrCity['city_url'] . '/mini_hotels.htm', $needFullPath, $opposite, $urlLang);
	}
	
	/**
	 * Возвращает ссылку на апартаменты города
	 *
	 * @param array $arrCity - Массив с данными по городу
	 */
	public static function getUrlApartments($arrCity, $needFullPath = false, $opposite = false, $urlLang = null) {
		Service_Debug::setDebug();
		return self::getLanguageUrl(($needFullPath ? W_FULLPATH : W_ABSPATH) . 'hotels/' . $arrCity['country_url'] . '/' . $arrCity['city_url'] . '/apartments.htm', $needFullPath, $opposite, $urlLang);
	}
	
	/**
	 * Возвращает ссылку на недорогие гостиницы города
	 * 
	 * @param array $arrCity - Массив с данными по городу
	 */
	public static function getUrlCheapHotels($arrCity, $needFullPath = false, $opposite = false, $urlLang = null) {
		Service_Debug::setDebug();
		return self::getLanguageUrl(($needFullPath ? W_FULLPATH : W_ABSPATH) . 'hotels/' . $arrCity['country_url'] . '/' . $arrCity['city_url'] . '/cheap_hotels.htm', $needFullPath, $opposite, $urlLang);
	}	
	
	public static function getOldUrl($countryUrl, $cityUrl, $needFullPath = false) {
		Service_Debug::setDebug();
		if (Service_Escape::isAnyEmpty($countryUrl, $cityUrl)) return '#';
		else return ($needFullPath ? W_FULLPATH : W_ABSPATH) . 'hotels/' . $countryUrl . '/' . $cityUrl . '/hotels_list.htm';
	}		
	
	/**
	 * Выводит форму объединения городов
	 * 
	 */
	public function showMergeForm(City $objCity, $arrOldCities) {
		Service_Debug::setDebug();
		if ($objCity->getField('is_filled')) return false;
		$objForm = new Form_Form();
		$arrForTop = array(0 => array('basic_city_id' => 0, 'ian_city_name' => 'Выберите город для совмещения'));
		$objForm->show();
		  echo 'Совместить с городом из старой админки: '; 
		  $objForm->selectField(array('optionsArray' => $arrOldCities, 'optionsArrayForTop' => $arrForTop, 'keyName' => 'basic_city_id', 'valueName' => 'ian_city_name'), 'basic_city_id');
		  $objForm->submitButton(array('value' => 'Совместить'), 'save');
		$objForm->close();
	}
	
	/**
	 * Выводит список городов для совмещения
	 * 
	 * @param array $arrNewCities
	 * @param array $arrOldCities
	 */
	public function showMergeLists(array $arrNewCities, array $arrOldCities) {
		Service_Debug::setDebug();
		echo '<div style="float:left;width:40%;margin-right:20px;">';
		  if ($arrNewCities) {
		  	echo '<ul>';
		  	foreach ($arrNewCities as $arrNewCity) {
		  		echo '<li><a href="' . W_ADMIN . 'cities/edit/' . $arrNewCity['ID_city'] . '/">' . $arrNewCity['city_name_en'] . ' (' . $arrNewCity['city_name_ru'] . ')</a></li>';;
		  	}
		  	echo '</ul>';
		  }
		  else echo 'Новых городов нет';
		echo '</div>';
		echo '<div style="float:left;">';
		  if ($arrOldCities) {
		  	echo '<ul>';
		  	foreach ($arrOldCities as $arrOldCity) {
		  		echo '<li>' . $arrOldCity['ian_city_name'] . '</li>';;
		  	}
		  	echo '</ul>';
		  }
		  else echo 'Старых городов нет';
		echo '</div>';
	}
	
	/**
	 * Возвращает название города согласно языку и падежу
	 * 
	 * @param array $arrCity
	 * @param int $declination
	 * @param string $language
	 */
	public static function getName($arrCity, $declination = 1, $language = null) {
		if (!$language) $language = Service_Translate::getLang();
		if ($language == 'ru') {
		  switch ($declination) {
		  	case 2:
		  		if (!empty($arrCity['city_admin_name_ru_2'])) return $arrCity['city_admin_name_ru_2'];
		  		if (!empty($arrCity['city_final_name_ru'])) return Service_Declination::getGenitive($arrCity['city_final_name_ru']);
		  		return $arrCity['city_final_name_en'];
		  		break;
		  	case 6:
          if (!empty($arrCity['city_admin_name_ru_6'])) return $arrCity['city_admin_name_ru_6'];
		  		if (!empty($arrCity['city_final_name_ru'])) return Service_Declination::getPrepositional($arrCity['city_final_name_ru']);
		  		return $arrCity['city_final_name_en'];
		  	default:
		  		if (!empty($arrCity['city_final_name_ru'])) return $arrCity['city_final_name_ru'];
		  		return $arrCity['city_final_name_en'];
		  }
		}
		else return $arrCity['city_final_name_en'];
	}
	
	/**
	 * Возвращает HTML аватарки города
	 * 
	 * @param array $arrCity
	 */
	public static function getCityAvatar( array $arrCity) {
		Service_Debug::setDebug();
		$lang = Service_Translate::getLang();
    return '<div class="avatar smallAvatar"><div class="avatarIn"><div class="image">' .
    	(empty($arrCity['avatar']) ? '' : '<img class="image" src="' . $arrCity['avatar'] . '" alt="' . View_City::getName($arrCity) . '" />') .
    '</div></div></div>';
	}
	
	
	public function showFullHotelsList($arrHotels, $arrCity) {
		Service_Debug::setDebug();
	}

	/**
	 * Формирует Сео description для города
	 * 
	 * @param City $objCity - объект города, которому соответствует раскручиваемая страница
	 */
	public static function getSeoDescription(City $objCity) {
		if (!$objCity->id) return null; 
		$seoTypeForTranslate = Hotel::getSeoTypeForTranslate(
			$objCity->getField('country_code'), 
			array('nr_hotels' => $objCity->getField('nr_hotels'))
		);
		$cityNameGenetive = View_City::getName($objCity->tableFields, 2);
	  $cityNamePrepositional = View_City::getName($objCity->tableFields, 6);
	  
		$arrWordsToChoose = array();
	  	$arrWordsToChoose[] = $cityNameGenetive;
	  	$arrWordsToChoose[] = $cityNamePrepositional;
	  	switch ($seoTypeForTranslate) {
	  		case 'по отелям':
	  			$arrWordsToChoose[] = array('Широкий выбор', 'Большой выбор', 'Много', 'Огромный выбор', 'Большое количество');
	  			$arrWordsToChoose[] = array('система бронирования', 'бронирование');
	  			$arrWordsToChoose[] = array('Все популярные', 'Самые популярные', 'Все', 'Популярные', 'Лучшие');
	  			$arrWordsToChoose[] = array('подробное описание, фото номеров, цены в гостиницах', 'описание номеров, фото, актуальные цены', 'подробное описание и фото номеров, актуальные цены в гостиницах');
	  			break;
	  		case 'по гостиницам':
	  			$arrWordsToChoose[] = array('На сайте', 'В данном разделе');
	  			$arrWordsToChoose[] = array('популярные', 'наиболее популярные', 'лучшие');
	  			$arrWordsToChoose[] = array('удобная система бронирования', 'возможность бронирования', 'Online бронирование');
	  			$arrWordsToChoose[] = array('Подробная информация', 'Полная информация', 'Вся информация');
	  			$arrWordsToChoose[] = array('фото', 'фотографии');
	  			break;
	  		case 'по гостиницам малых городов':
	  			$arrWordsToChoose[] = array('На сайте', 'В данном разделе');
	  			$arrWordsToChoose[] = array('популярные', 'наиболее популярные');
	  			$arrWordsToChoose[] = array('удобная система бронирования', 'возможность бронирования', 'Online бронирование');
	  			$arrWordsToChoose[] = array('Подробная информация', 'Полная информация', 'Вся информация');
	  			$arrWordsToChoose[] = array('фото', 'фотографии');
	  			break;
	  	}
		  $arrWordsForSeoDescription = Service_Function::getWordsForSeo($arrWordsToChoose, $objCity->id);
		  return Service_Translate::getText('Сео дескрипшн города ' . $seoTypeForTranslate, $arrWordsForSeoDescription);
	}

	/**
	 * Формирует Сео описание для города
	 * 
	 * @param City $objCity - объект города, которому соответствует раскручиваемая страница
	 */
	public static function getSeoText(City $objCity) {
		if (!$objCity->id) return null; 
		$seoTypeForTranslate = Hotel::getSeoTypeForTranslate(
			$objCity->getField('country_code'), 
			array('nr_hotels' => $objCity->getField('nr_hotels'), 'use_small_for_oteli' => true)
		);
		$cityNameGenetive = View_City::getName($objCity->tableFields, 2);
	  $cityNamePrepositional = View_City::getName($objCity->tableFields, 6);
	  $hostelsCnt = $objCity->getHostelsCnt();
	  $nrCityHotels = $objCity->getField('nr_hotels');
	  $miniCnt = $objCity->getMiniHotelsCnt();
	  $apartmentsCnt = $objCity->getHotelsApartments();
  	
  	$predstavlenyDeclension = 'представлены';
  	if ($nrCityHotels >= 10 && $nrCityHotels % 10 == 1) $predstavlenyDeclension = 'представлен';
  	
	  if (Hotel::isSeoGostincy($objCity->getField('country_code'))) $hotelDeclension = Service_Declination::getHotelsDeclension($nrCityHotels) ;
	  else $hotelDeclension = Service_Declination::getOtelsDeclension($nrCityHotels) ; 
	  
	  $hostelsText = '';
	  if ($hostelsCnt) {
	  	$seoTypeForTranslateOnlyBig = Hotel::isSeoGostincy($objCity->getField('country_code')) ? 'по гостиницам' : 'по отелям';
	  	$hostelsText = '<p>' . Service_Translate::getText('Сео ссылка на хостелы города ' . $seoTypeForTranslateOnlyBig, View_City::getUrlHostels($objCity->tableFields), $cityNameGenetive, View_City::getUrlCheapHotels($objCity->tableFields)) . '</p>';
	  }
	  elseif ($nrCityHotels >= 10) {
			$seoTypeForTranslateOnlyBig = Hotel::isSeoGostincy($objCity->getField('country_code')) ? 'по гостиницам' : 'по отелям';
	  	$hostelsText = '<p>' . Service_Translate::getText('Сео ссылка на дешевые гостиницы города ' . $seoTypeForTranslateOnlyBig, View_City::getUrlCheapHotels($objCity->tableFields), $cityNameGenetive) . '</p>';	  	
	  }
	  $miniText = '';
	  if ($miniCnt >= 3) $miniText = '<p>' . Service_Translate::getText('Сео ссылка на мини-отели', $cityNameGenetive, View_City::getUrlMini($objCity->tableFields)) . '</p>';
	  $apartmentsText = '';
	  if ($apartmentsCnt) $apartmentsText = '<p>' . Service_Translate::getText('Сео ссылка на апартаменты', $cityNameGenetive, View_City::getUrlApartments($objCity->tableFields)) . '</p>';

		$arrWordsToChoose = array();
	  	$arrWordsToChoose[] = $cityNameGenetive;
	  	$arrWordsToChoose[] = $cityNamePrepositional;
	  	$arrWordsToChoose[] = $objCity->getField('nr_hotels');
	  	$arrWordsToChoose[] = $hotelDeclension;
	  	$arrWordsToChoose[] = $predstavlenyDeclension;
	  	switch ($seoTypeForTranslate) {
	  		case 'по отелям':
	  			$arrWordsToChoose[] = array('В каталоге', 'На сайте', 'В данном разделе сайта');
	  			$arrWordsToChoose[] = array('на номера', '');
	  			$arrWordsToChoose[] = array('уровня комфорта и местоположения гостиницы', 'местоположения и класса гостиницы', 'уровня сервиса гостиницы и местоположения');
	  			$arrWordsToChoose[] = array('популярным', 'известным');
	  			$arrWordsToChoose[] = array('Так же', 'Помимо этого');
	  			$arrWordsToChoose[] = array('наличие', 'перечень');
	  			break;
	  		case 'по отелям малых городов':
	  			$arrWordsToChoose[] = array('В каталоге', 'На сайте', 'В текущем разделе', 'На данной странице');
	  			$arrWordsToChoose[] = array('уровня комфорта и местоположения гостиницы', 'местоположения и класса гостиницы', 'предоставляемого сервиса и местоположения гостиницы');
	  			$arrWordsToChoose[] = array('популярным', 'известным');
	  			$arrWordsToChoose[] = array('Так же', 'Помимо этого');
	  			$arrWordsToChoose[] = array('наличие', 'перечень');
	  			break;
	  		case 'по гостиницам':
	  			$arrWordsToChoose[] = array('На сайте', 'В текущем разделе', 'На данной странице');
	  			$arrWordsToChoose[] = array('уровня комфорта и местоположения гостиницы', 'местоположения и класса гостиницы', 'предоставляемого сервиса и местоположения гостиницы', 'уровня сервиса и местоположения гостиницы');
	  			$arrWordsToChoose[] = array('популярным', 'известным');
	  			$arrWordsToChoose[] = array('Так же', 'Помимо этого');
	  			$arrWordsToChoose[] = array('наличие', 'перечень');
	  			break;
	  		case 'по гостиницам малых городов':
					$arrWordsToChoose[] = array('На сайте', 'В текущем разделе', 'На данной странице');
					$arrWordsToChoose[] = array('уровня комфорта и местоположения гостиницы', 'местоположения и класса гостиницы', 'предоставляемого сервиса и местоположения гостиницы', 'уровня сервиса и местоположения гостиницы');
					$arrWordsToChoose[] = array('популярным', 'известным');
					$arrWordsToChoose[] = array('Так же', 'Помимо этого');
					$arrWordsToChoose[] = array('наличие', 'перечень');
	  			break;
	  	}

		  $arrWordsForSeoDescription = Service_Function::getWordsForSeo($arrWordsToChoose, $objCity->id);
		  return '<p>' . Service_Translate::getText('Сео описание города ' . $seoTypeForTranslate, $arrWordsForSeoDescription) . '</p>' . $hostelsText . $miniText . $apartmentsText;
	}
	
	/**
	 * Формирует Сео description для страницы города со спиком хостелов
	 * 
	 * @param City $objCity - объект города, которому соответствует раскручиваемая страница
	 */
	public static function getSeoDescriptionForHostels(City $objCity) {
		if (!$objCity->id) return null; 

		$cityNameGenetive = View_City::getName($objCity->tableFields, 2);
	  $cityNamePrepositional = View_City::getName($objCity->tableFields, 6);
	  
		$arrWordsToChoose = array();
  	$arrWordsToChoose[] = $cityNameGenetive;
  	$arrWordsToChoose[] = $cityNamePrepositional;
  	$arrWordsToChoose[] = array('В данной разделе', 'На сайте', 'На данной странице');
  	$arrWordsToChoose[] = array('популярные', 'наиболее популярные');
  	$arrWordsToChoose[] = array('без комиссии', '- комиссия 0%');
  	
	  $arrWordsForSeoDescription = Service_Function::getWordsForSeo($arrWordsToChoose, $objCity->id);
	  return Service_Translate::getText('Сео дескрипшн хостелов', $arrWordsForSeoDescription);
	}
	
	/**
	 * Формирует Сео описание (видимый текст) для страницы города со спиком хостелов
	 * 
	 * @param City $objCity - объект города, которому соответствует раскручиваемая страница
	 */
	public static function getSeoTextForHostels(City $objCity) {
		if (!$objCity->id) return null; 

		$cityNameGenetive = View_City::getName($objCity->tableFields, 2);
	  $cityNamePrepositional = View_City::getName($objCity->tableFields, 6);
	  
		$arrWordsToChoose = array();
  	$arrWordsToChoose[] = $cityNameGenetive;
  	$arrWordsToChoose[] = $cityNamePrepositional;
  	$arrWordsToChoose[] = array('На сайте', 'На этой странице');
  	$arrWordsToChoose[] = array('любой', 'понравившейся');
  	$arrWordsToChoose[] = array('фото', 'фотографии');
  	
	  $arrWordsForSeoDescription = Service_Function::getWordsForSeo($arrWordsToChoose, $objCity->id);
	  return Service_Translate::getText('Сео описание хостелов', $arrWordsForSeoDescription);
	}
	
	/**
	 * Формирует Сео description для страницы города со спиком недорогих гостиниц
	 * 
	 * @param City $objCity - объект города, которому соответствует раскручиваемая страница
	 */
	public static function getSeoDescriptionForCheapHotels(City $objCity) {
		if (!$objCity->id) return null; 

		$cityNameGenetive = View_City::getName($objCity->tableFields, 2);
	  $cityNamePrepositional = View_City::getName($objCity->tableFields, 6);
	  
		$arrWordsToChoose = array();
  	$arrWordsToChoose[] = $cityNameGenetive;
  	$arrWordsToChoose[] = $cityNamePrepositional;
  	$arrWordsToChoose[] = array('В данной разделе', 'На сайте', 'На данной странице');
  	$arrWordsToChoose[] = array('без комиссии', '- комиссия 0%');
  	
	  $arrWordsForSeoDescription = Service_Function::getWordsForSeo($arrWordsToChoose, $objCity->id);
	  return Service_Translate::getText('Сео дескрипшн недорогих гостиниц', $arrWordsForSeoDescription);
	}
	
	/**
	 * Формирует Сео описание (видимый текст) для страницы города со спиком недорогих гостиниц
	 * 
	 * @param City $objCity - объект города, которому соответствует раскручиваемая страница
	 */
	public static function getSeoTextForCheapHotels(City $objCity) {
		if (!$objCity->id) return null; 

		$cityNameGenetive = View_City::getName($objCity->tableFields, 2);
	  $cityNamePrepositional = View_City::getName($objCity->tableFields, 6);
	  
		$arrWordsToChoose = array();
  	$arrWordsToChoose[] = $cityNameGenetive;
  	$arrWordsToChoose[] = $cityNamePrepositional;
  	$arrWordsToChoose[] = array('без комиссии', '- комиссия 0%');
  	$arrWordsToChoose[] = array('сайте', 'странице');
  	$arrWordsToChoose[] = array('подобрать', 'найти');
  	$arrWordsToChoose[] = array('фотографии', 'фото');
  	
	  $arrWordsForSeoDescription = Service_Function::getWordsForSeo($arrWordsToChoose, $objCity->id);
	  return Service_Translate::getText('Сео описание недорогих гостиниц', $arrWordsForSeoDescription);
	}
	
	/**
	 * Формирует Сео описание для страницы города со спиком мини-гостиниц
	 *
	 * @param City $objCity - объект города, которому соответствует раскручиваемая страница
	 */
	public static function getSeoDescriptionForMiniHotels(City $objCity) {
		if (!$objCity->id) return null;
		$cityNameGenetive = View_City::getName($objCity->tableFields, 2);
		return Service_Translate::getText('Сео описание мини-отелей', $cityNameGenetive);
	}
	
	/**
	 * Формирует Сео описание для страницы города со спиком отелей по звездам
	 *
	 * @param City $objCity - объект города, которому соответствует раскручиваемая страница
	 * @param int $class - количество звезд у отеля
	 */
	public static function getSeoTextForHotelsByStars(City $objCity, $class) {
		if (!$objCity->id) return null;
	
		$cityNameGenetive = View_City::getName($objCity->tableFields, 2);
		$cityNamePrepositional = View_City::getName($objCity->tableFields, 6);
		 
		$arrWordsToChoose = array();
		$arrWordsToChoose[] = array('данном', 'этом');
		$arrWordsToChoose[] = $cityNameGenetive;
		$arrWordsToChoose[] =  Service_Translate::getText($class . ' звезд');
		$arrWordsToChoose[] = array('На сайте', 'В данной системе');
		$arrWordsToChoose[] = Service_Translate::getText($class . ' звездочном');
		 
		$arrWordsForSeoDescription = Service_Function::getWordsForSeo($arrWordsToChoose, $objCity->id);
		return Service_Translate::getText('Сео описание отелей по звездам', $arrWordsForSeoDescription);
	}
	
	/**
	 * Формирует Сео описание для страницы города со спиком апартаментов
	 *
	 * @param City $objCity - объект города, которому соответствует раскручиваемая страница
	 */
	public static function getSeoTextForApartments(City $objCity) {
		if (!$objCity->id) return null;
		$cityNameGenetive = View_City::getName($objCity->tableFields, 2);
		$cityNamePrepositional = View_City::getName($objCity->tableFields, 6);
		return Service_Translate::getText('Сео описание апартаменты', $cityNameGenetive, $cityNamePrepositional);
	}
	
	/**
	 * Выводит список городов, в которых есть достопримечательности
	 * 
	 * @param array $arrCities - массив городов с достопримечательностями
	 */
	public function showPlacesCityList(array $arrCities) {
		Service_Debug::setDebug();
		$columnSize = ceil(sizeof($arrCities) / 3);
		$stopForColumn = $columnSize;
		if (!$columnSize) return false;
		echo '<div class="list-by-columns">';
			$i = 0;
			echo '<ul>';
			  foreach ($arrCities as $arrCity) {
			  	if ($i == $stopForColumn) {
						$stopForColumn += $columnSize;
						if ($columnSize * 3 - sizeof($arrCities) > 1) $stopForColumn--;
						echo '</ul><ul>';
					}
					echo '<li><a href="' . View_Place::getCityUrl($arrCity) . '">' .  View_City::getName($arrCity) . '</a> (' .  $arrCity['places_amount'] . ')</li>';
					$i++;
				}
			echo '</ul>';
			echo '<div class="clear"></div>';
		echo '</div>';
	}
	
	/**
	 * Метод выводит seo описания на конкрентной странице
	 * @param array $arrCityData - массив с данными о городе
	 */
	public function showSeoText(array $arrCityData) {
		$language = Service_Translate::getLang();
		$arrPages = array('hostel' => 'Хостелы', 'cheap' => 'Недорогие гостиницы', 'mini' => 'Мини-гостиницы', 'stars' => 'Гостиницы по звездам', 'apartments' => 'Апартаменты', 'region' => 'Отели');
		$pageType = '';
		foreach ($arrPages as $page => $headerName) {
			if (!empty($arrCityData['show_right_description_' . $page])) {
				$pageType = $page;
				break;
			}
		}
		if ($pageType) {
			switch ($pageType) {
				case 'hostel':
					$seoText = self::getSeoDescriptionForHostels($arrCityData['obj_city']);
					break;
				case 'cheap':
					$seoText = self::getSeoTextForCheapHotels($arrCityData['obj_city']);
					break;
				case 'mini':
					$seoText = self::getSeoDescriptionForMiniHotels($arrCityData['obj_city']);
					break;
				case 'stars':
					$seoText = self::getSeoTextForHotelsByStars($arrCityData['obj_city'], $arrCityData['class']);
					$headerName = Service_Translate::getText($arrCityData['class'] . ' Звездочные') . ' гостиницы';
					break;
				case 'apartments':
					$seoText = self::getSeoTextForApartments($arrCityData['obj_city']);
					break;
				case 'region':
					$seoText = $arrCityData['show_right_description_region']->getSeoText($arrCityData['obj_region']);
					$headerName .= ' в ' .  View_Region::getName($arrCityData['obj_region']->tableFields, 6);
					break;
			}
			if ($pageType != 'region') $headerName .= ' в ' .  View_City::getName($arrCityData['obj_city']->tableFields, 6);
			$arrCityData['show_right_description_' . $pageType]->showDescription(array('text_' . $language => '<p>' . $seoText . '</p>'), $headerName);
		}
	}
	
	/**
	 * Метод выводит список популярных отелей
	 * @param array $arrBestHotels - массив популярных отелей
	 * @param array $arrCity - массив города
	 */
	public function showBestCity($arrBestHotels, $arrCity) {
		echo '<div id="mostPopularHotelsCity">';
		echo '<h2>' . Service_Translate::getText('Часто бронируемые гостиницы города', View_City::getName($arrCity, 2)) . '</h2>';
		foreach ($arrBestHotels as $arrPopularHotel) {
			$hotelUrl = View_Hotel::getUrl($arrPopularHotel);
			echo '<div class="mostPopularCity">';
			echo '<h5><a href="' . $hotelUrl . '">' . View_Hotel::getName($arrPopularHotel) . '</a></h5>';
			if ($arrPopularHotel['class']) echo '<div class="stars stars' . $arrPopularHotel['class'] . '"></div>';
			if ($arrPopularHotel['last_booking']) {
				$day = substr($arrPopularHotel['last_booking'], 0, 4)*364.25 + substr($arrPopularHotel['last_booking'], 5, 2)*30.5 + substr($arrPopularHotel['last_booking'], 8, 2);
				$arrPopularHotel['last_booking'] = date('Y-m-d');
				$day = floor(substr($arrPopularHotel['last_booking'], 0, 4)*364.25 + substr($arrPopularHotel['last_booking'], 5, 2)*30.5 + substr($arrPopularHotel['last_booking'], 8, 2) - $day);
				switch ($day) {
					case 0:
						echo '<div class="bookingWas orange">' . Service_Translate::getText('Бронирование осуществлялось сегодня') . '</div>';
						break;
					case 1:
						echo '<div class="bookingWas orange">' . Service_Translate::getText('Бронирование осуществлялось вчера') . '</div>';
						break;
					default:
						echo '<div class="bookingWas">' . Service_Translate::getText('Бронирование осуществлялось ') . $day . Service_Translate::getText(Service_Function::getDeclination($day, 'день', 'дня', 'дней') . ' назад') . '</div>';
				}
			}
			echo '</div>';
		}
		echo '</div>';
	}
	
	/**
	 * Метод выводит сео описание для странице города
	 * @param array $arrCity
	 * @param string $seoText
	 */
	public function showCitySeoText($arrCity, $seoText) {
		echo '<div id="cityDescriptionText">';
		echo '<h2>' . Service_Translate::getText('Гостиницы города', View_City::getName($arrCity, 2)) . '</h2>';
		echo $seoText;
		echo '</div>';
	}
	
	/**
	 * Метод выводит ближайшие города
	 * @param array $arrSimilarCity - массив ближайших городов
	 */
	public function showSimilarCity($arrSimilarCity) {
		if (Hotel::isSeoGostincy($arrSimilarCity[0]['country_code'])) $seoTypeForTranslate = 'по гостиницам';
		else $seoTypeForTranslate = 'по отелям';
		echo '<div id="similarCity">';
		echo '<h2>' . Service_Translate::getText('Ближайшие города') . '</h2>';
		foreach($arrSimilarCity as $arrCity)
			echo '<h5><a href="' . self::getUrl($arrCity) . '">' . Service_Function::utf8_first_to_upper(Service_Translate::getText('Сео гостиницы '. $seoTypeForTranslate)) . ' ' . self::getName($arrCity, 2) . '</a> <span>- ' . Service_Translate::getText('км.', ceil($arrCity['range'])) . '</span></h5>';
		echo '</div>';
	}
	
	/**
	 * Метод выводит кнопки с информацией
	 */
	public function showInfoButtons() {
		echo '<div id="infoButtons">';
			echo '<div class="guarantee behavior popupTrigger"><img src="' . W_IMAGES . 'none.gif" alt=""><span>' . Service_Translate::getText('Гарантия самой низкой цены') . '</span></div>';
			echo '<div id="guaranteeText" class="popupBox" style="display:none;">' . Service_Translate::getText('Гарантия низкой цены текст') . '</div>';
			echo '<div class="accept behavior popupTrigger"><img src="' . W_IMAGES . 'none.gif" alt=""><span>' . Service_Translate::getText('Моментальное подтверждение бронирования') . '</span></div>';
			echo '<div class="popupBox">';
				View_Block::showInstantConfirmationText();
			echo '</div>';
			echo '<div class="clear"></div>';
		echo '</div>';
	}
	
}
?>